LinuC-1 - 101試験 - 1.05:ハードウェア、ディスク、パーティション、ファイルシステム - 1.05.1 ハードウェアの基礎知識と設定

Last Update : August 21 2022 17:47:20

     

a. BIOS

BIOS(Basic Input Output Systemの略)は バイオスと読みます。 BIOSは、コンピュータのマザーボードや拡張カード上に搭載されているフラッシュROMに書き込まれたプログラムで、周辺機器との間の入出力を制御する基本的なプログラムです。コンピュータの起動時にオペレーティングシステム(OS)よりも前に読み出され、どんなハードウェアが接続されているか、各種ハードウェアが正常に起動するかをチェックし、そのデータをOSに引き渡します。
BIOSの役割とは、

  1. OSを起動するためのプログラムを記憶装置から読み込んで実行する。
  2. 接続している各種デバイスの設定を行う。
  3. 基本的な入出力を行う。

1.BIOSセットアップ

BIOSのセットアップはBIOS設定画面で行います。設定画面を表示させるには、コンピュータの電源投入時に、特定のキーを押すことで表示されます。(F1キー・F2キー・DELETEキーなど)
BIOSの設定画面では以下のような設定が可能です。

Main
日付、時刻、FDDのモード設定など
[IDE Configuration] : IDEハードディスクのモード設定
[System Information] : BIOS、CPU、メモリなどの情報

Advanced
[Jumperfee Configuration] : CPUやメモリークロックなどのオーバークロック向けの設定項目
[LAN Cable Status] : LANの接続状況を表示
[USB Configuration] : USBのモード設定
[CPU Configuration] : 拡張版SpeedStepやVTNXビットなど、CPUの機能設定
Chipset
[North Bridge] : メモリーのアクセスタイミングの設定など
[South Bridge] : PCI Expressの設定
[Onboard Devices Contiguration] : サウンド、LAN、シリアルポート、パラレルポートなどの設定
[PCIPnP] : IRQの設定など

Power
スタンバイのモード設定
[APM Configuration] : APMモードの起動設定など
[Hardware Monitor] : CPU温度や、ファンの回転数、ファン制御機能など

Boot
[Boot Device Priority] : 起動順序の設定など
[Boot Settings Configuration] : 起動時のオプション設定
[Security] : パスワード設定

Tools
BIOS更新ツールなどの呼び出し

Exit
変更内容の保存、デフォルト設定などの呼び出し


2.IRQ(Interrupt ReQuest)

IRQは割込み要求と呼ばれ、各種デバイスがCPUを呼び出すときの信号のことで、割込み要求の信号を受け取ると処理中のCPUは処理を一旦中断し、どのデバイスからの要求なのかを判断し、要求のあったデバイスの処理を実行します。
コンピュータのIRQは0~15までの番号で表わされ、それぞれ各デバイスに自動的に割り振られています。

●一般的なIRQの割り当て
  0システムタイマー
  1キーボード
  2割込みコントローラ
  3シリアルポート( COM2 )
  4シリアルポート( COM1 )
  5空き
  6フロッピーディスクドライブ
  7プリンタポート( LPT1 )
  8リアルタイムクロック
  9空き
 10空き
 11USBコントローラ
 12PS/2マウス
 13数値データプロセッサ
 14プライマリIDE
 15セカンダリIDE

通常、IRQ番号は各デバイスに自動的に割り当てられますが、自動で割り当てができなかった場合や、手動で割り当てを行う場合などの時には、IRQ番号が重複しないようにしなければなりません。IRQ番号が重複すると、デバイスが動作しなかったり、動作しても不安定になったりします。
IRQ番号の割り当ては、/proc/interrupts/ で確認できます。

# cat /proc/interrupts
CPU0 CPU1 0: 8381673 34505 IO-APIC-edge timer 1: 6 5 IO-APIC-edge i8042 8: 1 0 IO-APIC-edge rtc 9: 0 1 IO-APIC-level acpi 12: 57 46 IO-APIC-edge i8042 14: 112 74355 IO-APIC-edge ide0 15: 0 0 IO-APIC-edge ata_piix 169: 3 251712 IO-APIC-level uhci_hcd:usb2, eth0 177: 0 0 IO-APIC-level ehci_hcd:usb1 185: 0 0 IO-APIC-level uhci_hcd:usb3 193: 2432 20444 IO-APIC-level ioc0 NMI: 0 0 LOC: 8413247 8413237 ERR: 0 MIS: 0


3.I/Oアドレス

CPUが各種デバイスとデータを送受信するために使う窓口のこと。「入出力ポート」とも呼ばれます。それぞれのI/Oポートは識別するための固有のI/Oポートアドレスを持っています。
PC/AT互換機ではメモリ領域の0000h~FFFFhが使用されます。
I/OポートアドレスもIRQと同様に重複しないように割り当てる必要があります。
I/Oポートアドレスの割り当ては、/proc/ioports で確認できます。

# cat /proc/ioports
0000-001f : dma1 0020-0021 : pic1 0040-0043 : timer0 0050-0053 : timer1 0060-0060 : keyboard 0064-0064 : keyboard 0070-0077 : rtc 0080-008f : dma page reg 00a0-00a1 : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : libata 01f0-01f7 : ide0 03c0-03df : vga+ 03f6-03f6 : ide0 03f8-03ff : serial 0400-043f : 0000:00:1f.0 0400-043f : pnp 00:0c 0440-045f : 0000:00:1f.3 0440-045f : i801_smbus 0480-048f : 0000:00:1f.2 0480-048f : ata_piix 0520-053f : pnp 00:01 0540-0547 : pnp 00:01 0580-05ff : 0000:00:1f.0 0580-0583 : ACPI PM1a_EVT_BLK 0584-0585 : ACPI PM1a_CNT_BLK 0588-058b : ACPI PM_TMR 05a8-05af : ACPI GPE0_BLK 0cf8-0cff : PCI conf1 2200-221f : 0000:00:1d.0 2200-221f : uhci_hcd 2600-261f : 0000:00:1d.1 2600-261f : uhci_hcd 3000-3fff : PCI Bus #01 3000-30ff : 0000:01:01.0 4000-4fff : PCI Bus #03 4000-4fff : PCI Bus #04 4000-40ff : 0000:04:01.0 4000-40ff : mpt 5000-ffff : PCI Bus #07


4.DMA(Direct Memory Access)

デバイスとメモリ間でデータを転送する方法の1つ。CPUを介さずに、バス上のデバイスとメモリ間で(もしくはメモリ間同士で)直接データを転送する機能のことをいいます。CPUに負担をかけることなくデータの入出力を行うことができるので、現在実行中のタスクなどの実行が妨げられることがありません。また、CPUの負荷が減るので全体の処理策度が向上します。DMAを制御する回路のことをDMAコントローラといいます。
DMAチャネルは、デバイスがDMAコントローラに対してデータ転送を要求するために使う通信経路。一つのチャネルを複数のデバイスで共有できないため、DMA転送を利用するデバイスの間でDMAチャネルが衝突しないように設定する必要があります。
最近ではマザーボード上のDMAコントローラは使用されないことが多く、/proc/dmaを表示にはDMAコントローラ同士を接続する「cascade」表示になっている場合が多い
転送モードには、シングル転送モード、ブロック/デマンド転送モード、カスケード転送モード、自動初期化転送モードがあります。 DMAチャネルの割り当ては、/proc/dma で確認できます。

# cat /proc/dma 4: cascade

※上の例ではDMAチャネルにデバイスは割り当てられていません。cascadeは2つの制御チップを接続していることを示しています。

DMAチャネルを利用するのはISAデバイスであり、現在主流のPCIバスではバスマスタリングという方式をとっています。バスマスタリングはチャネル番号を使いません。



b. デバイスファイル

Linuxでは、ハードウェアへのアクセスを抽象化して扱えるようデバイスファイルというものを持っています。
すべてのハードウェアはデバイスファイルを持っていて、デバイスファイルの読み書きを通してハードウェアにアクセスするようになっています。

デバイス・ファイルはすべて、/dev以下に配置されています。/devで、lsコマンドを実行した結果を見ると、ファイル情報の先頭が「b」または「c」になっています。通常のファイルは「-」、ディレクトリは「d」、シンボリック・リンクは「l」ですから、通常のファイルでないことがわかります。実際に、デバイス・ファイルは通常のファイルとは異なり、カーネルがデバイスを識別するためにあります、メジャー番号・マイナー番号など、ごく少数のデータだけを保持しています。

プログラムからこれらのファイルに対してopen()などのシステム・コールを用いてアクセスすると、カーネル内に組み込まれたデバイス・ドライバが呼び出され、ファイルの代わりにデバイスにアクセスします。

アクセスの際、バッファを用いるものをブロック・デバイスと呼び、用いないものをキャラクタ・デバイスと呼びます。ls -alの実行結果で「b」とある「sda1」(SCSI接続のハード・ディスク)などはブロック・デバイス、「c」とある「tty1」(端末)などはキャラクタ・デバイスです。


1.デバイスの確認

デバイスごとのDMA、IRQ、I/Oアドレスを表示するには、lsdev コマンドを実行します。

# lsdev
Device DMA IRQ I/O Ports ------------------------------------------------ 0000:00:1d.0 2200-221f 0000:00:1d.1 2600-261f 0000:00:1f.0 0400-043f 0580-05ff 0000:00:1f.2 0480-048f 0000:00:1f.3 0440-045f 0000:01:01.0 3000-30ff 0000:04:01.0 4000-40ff acpi 9 ACPI 0580-0583 0584-0585 0588-058b 05a8-05af ata_piix 15 0480-048f cascade 4 dma 0080-008f dma1 0000-001f dma2 00c0-00df ehci_hcd:usb1 177 eth0 169 fpu 00f0-00ff i801_smbus 0440-045f i8042 1 12 ide0 14 01f0-01f7 03f6-03f6 ioc0 193 keyboard 0060-0060 0064-0064 libata 0170-0177 mpt 4000-40ff PCI 0cf8-0cff 3000-3fff 4000-4fff 4000-4fff 5000-ffff pic1 0020-0021 pic2 00a0-00a1 pnp 0400-043f 0520-053f 0540-0547 rtc 8 0070-0077 serial 03f8-03ff timer 0 timer0 0040-0043 timer1 0050-0053 uhci_hcd 2200-221f 2600-261f uhci_hcd:usb3 185 vga+ 03c0-03df

Linuxカーネルが認識しているデバイスに関する情報は、/proc 以下のファイルで確認できます。

● /proc 以下の主なファイル
  /proc/bus/usb/*USBデバイス情報
  /proc/cpuinfoCPU情報
  /proc/interruptsIRQ情報
  /proc/pciPCIデバイス情報
  /proc/scsi/scsiSCSIデバイス情報
  /proc/devices現在設定されている各種のキャラクタデバイスやブロックデバイスを表示 (モジュールがロードされていないデバイスは除く)
  /proc/meminfoシステム上の現在のRAM使用率についての情報を表示
  /proc/scsi/scsiSCSIデバイス情報
  /proc/mountsシステムで使用中の全マウントの一覧を表示
  /proc/partitionsパーティションブロックの割り当て情報を表示

【ブロックデバイスとキャラクタデバイス】

デバイスファイルにはブロックデバイスとキャラクタデバイスがあります。
(ls -l /dev を実行したときに、先頭がbならブロック、cならキャラクタデバイス)

ブロックデバイスはブロック単位でデバイスにアクセスし、ハードディスク、RAMディスク、RAIDボリュームなどが相当します。
キャラクタデバイスはキャラクタ(文学)単位でのアクセスとなり、キーボード、マウス、端末、プリンタなどが相当します。



c. SCSIデバイスの設定

1.SCSIの規格

SCSI(Small Computer System Interface)は、コンピュータと周辺機器などのハードウェア間のデータのやりとりを行うインタフェース規格の一つです。
SCSIでの各機器の接続はバス形式ですが、各機器を数珠つなぎで繋いでいくため、「デイジーチェーン接続」とも言われます。各機器は1つのSCSIバスに接続しなければいけません。また、バスの両端には信号の反射を防ぐため、ターミネータを接続しなければいけません。なお、ターミネータは、必ずしもバス終端に接続されるわけではなく、ホストバスアダプタやSCSI機器に内蔵される場合もあります。ターミネータがない場合は、SCSIデバイスの動作が不安定になったり、動かなくなったりします。
SCSIバスに接続する各機器はSCSIデバイスと呼ばれます。SCSIにはデータ幅が8ビットのタイプと16ビットのタイプがあり、各デバイスは、8ビットのタイプの場合は各々0から7、16ビットのタイプの場合は、0から15 までの番号で区別されます。この番号のことをSCSI IDといいます。通常、SCSIデバイスは各々、明示的にSCSI IDを設定しなければならないが、SCAMという拡張仕様を用いることで、自動的に設定することも可能です。
SCSI IDは、7→0,15→8の順にバス使用優先権が割り振られるため、SCSIデバイスを制御するコントローラ(SCSIホストアダプタ)のIDは7に、処理が遅くバスを頻繁に開放する機器(テープドライブやCD-ROM等)に優先順位の高い番号を割り当てます。SCSI ID はどのデバイスとも重複してはいけません。SCSI接続されているデバイスの情報を確認するには、/proc/scsi/scsi を参照します。


# cat /proc/scsi/scsi
Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: LSILOGIC Model: 1030 IM Rev: 1000 Type: Direct-Access ANSI SCSI revision: 02 Host: scsi0 Channel: 00 Id: 08 Lun: 00 Vendor: IBM Model: 25P3495a S320 1 Rev: 1 Type: Processor ANSI SCSI revision: 02 Host: scsi0 Channel: 01 Id: 00 Lun: 00 Vendor: IBM-ESXS Model: GNS073C3ESTT0ZFN Rev: JP85 Type: Direct-Access ANSI SCSI revision: 04 Host: scsi0 Channel: 01 Id: 01 Lun: 00 Vendor: IBM-ESXS Model: GNS073C3ESTT0ZFN Rev: JP85 Type: Direct-Access ANSI SCSI revision: 04

●一般的なSCSIの規格
 SCSI規格データ幅
(ビット)
最大接続数
(台)
最大転送速度
(MB/秒)
 SCSI-1875
 SCSI-2(Fast SCSI)8710
 SCSI-2(Wide SCSI)161520
 Ultra SCSI8720
 Ultra Wide SCSI161540
 Ultra2 SCSI161580
 Ultra 160 SCSI1615160
 Ultra 320 SCSI1615320


2.SCSI BIOS

一部のSCSIホストアダプタには、独自のBIOSを搭載しているものもあります。SCSI BIOSでは、SCSIコントローラのSCSI IDや、データ転送速度、内臓ターミネータのオン/オフの切り替えなどの設定をや行うことができます。SCSI BIOSの設定画面もコンピュータの起動時に特定のキーを押すことで表示されます。



3.SCSIデバイスファイル

Linuxはハードディスクなどのディスク装置だけではなく、すべてのデバイス(CD-ROM、シリアルポートなど)をデバイスファイルと呼ばれる特殊なファイルとして扱います。
デバイスファイルは /dev ディレクトリに格納され、SCSIディスクの場合、デバイスファイル名は、ディスク名にパーティション番号を付与したものとなります。 ディスク名を見れば何番目のSCSIディスクであるかわかるようになっています。

1番目のSCSIディスク・・・・・sda
2番目のSCSIディスク・・・・・sdb
3番目のSCSIディスク・・・・・sdc
4番目のSCSIディスク・・・・・sdd


●一般的なデバイスファイルの割り当て
 デバイスファイル名説明
 /dev/sda11番目のハードディスクドライブの1番目のパーティション
 /dev/sda21番目のハードディスクドライブの2番目のパーティション
 /dev/sdb12番目のハードディスクドライブの2番目のパーティション
 /dev/sdb22番目のハードディスクドライブの2番目のパーティション
 /dev/scd01番目のCD-ROMドライブ
 /dev/scd12番目のCD-ROMドライブ
 /dev/st11番目のテープドライブ
 /dev/st22番目のテープドライブ

また、IDEディスクもデバイスファイルとして扱われ、下記の様にディスク名が割り当てられます。
プライマリ・マスター・・・・・hda
プライマリ・スレーブ・・・・・hdb
セカンダリ・マスター・・・・・hdc
セカンダリ・スレーブ・・・・・hdd

SCSIディスク同様、これらのディスク名にパーティション番号を付与したものがデバイスファイル名となり、セカンダリ・スレーブに接続されているIDEディスク3番目のパーティションのデバイスファイルは /dev/hdd3となります。
ただし、最近のLinux(カーネルバージョンが2.6.18以降)では、IDEディスクもSCSIディスクと同様に扱うようになり、/dev/hda を /dev/sda と表記するようになっているので注意が必要です。
デバイスファイル名の確認は、df コマンドで確認できます。


# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/mapper/VolGroup00-LogVol00 67292728 3123584 60695736 5% / /dev/sda1 101086 18459 77408 20% /boot tmpfs 517452 0 517452 0% /dev/shm



d. SerialATA

パソコンで記憶装置を接続するためのインターフェースで、IDE(ATA)の後継規格です。「SATA」(「サタ」と読む)と略すこともあります。従来のIDEでは複数の信号を同時に送るパラレル転送だったのに対し、Serial ATAでは1組の信号線を使って、データを順次送るシリアル転送を採用しています。これにより、信号間の干渉がなくなり、データ転送のタイミング調整も不要になることから、より高速なデータ転送が可能になっています。また、IDEでは接続に40ピンのフラットケーブルを使用していたのに対し、Serial ATAでは幅1cm程度のスリムなケーブルになり、取り扱いが容易になっています。さらに、設定のためのジャンパーピンが不要で、ホットプラグ(パソコンの電源を入れたまま交換できる)に対応しているなど利便性が向上しており、現在ではIDEに代わって広く使用されています。データ転送速度は、現在のSerial ATA 2.0で300MB/秒、Serial ATA 3.0では600MB/秒となります。Serial ATAを外付けの記憶装置の接続に利用するExternal Serial ATAという規格もあり、eSATA(「イーサタ」と読む)と表記されます。


e. 拡張カードの設定
● ISA(Industrial Standard Architecture)
PC/ATで採用されたバス規格でIEEEが正式に標準化
転送速度は8MB/秒で現在のPCと釣り合わなくなったためPCIに移行された

● PCI(Peripheral Components Interconnect)
PCに組み込むことによって、さまざまな機能を追加することができる
プラグ&プレイに対応しているため、IRQは自動割当てされる
IRQが重複した場合は、BIOSでIRQを設定する必要がある

Linuxカーネルが認識しているPCIデバイス一覧を表示するには「lspci」コマンドを実行します。デバイスの種類、ベンダー、デバイス名といった情報を一覧表示します。

# lspci
00:00.0 Host bridge: Intel Corporation E7520 Memory Controller Hub (rev 0c) 00:00.1 Unassigned class [ff00]: Intel Corporation E7525/E7520 Error Reporting Registers (rev 0c) 00:02.0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express Port A (rev 0c) 00:04.0 PCI bridge: Intel Corporation E7525/E7520 PCI Express Port B (rev 0c) 00:06.0 PCI bridge: Intel Corporation E7520 PCI Express Port C (rev 0c) 00:07.0 PCI bridge: Intel Corporation E7520 PCI Express Port C1 (rev 0c) 00:08.0 System peripheral: Intel Corporation E7525/E7520/E7320 Extended Configuration Registers (rev 0c) ・ ・ 省略

オプション「-v」をつけるとIRQやI/Oポートアドレスの詳細情報を表示することができます。
「-vv」を付けるとさらな詳しい情報を表示します。

# lspci -v
00:00.0 Host bridge: Intel Corporation E7520 Memory Controller Hub (rev 0c) Subsystem: IBM Device 02dc Flags: bus master, fast devsel, latency 0 Memory at <ignored> (32-bit, non-prefetchable) Capabilities: [40] Vendor Specific Information: Len=05 <?> Kernel modules: e752x_edac 00:00.1 Unassigned class [ff00]: Intel Corporation E7525/E7520 Error Reporting Registers (rev 0c) Subsystem: IBM Device 02dc Flags: fast devsel 00:02.0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express Port A (rev 0c) (prog-if 00 [Normal decode]) Flags: bus master, fast devsel, latency 0 Bus: primary=00, secondary=02, subordinate=02, sec-latency=0 Capabilities: [50] Power Management version 2 Capabilities: [58] MSI: Enable- Count=1/2 Maskable- 64bit- Capabilities: [64] Express Root Port (Slot-), MSI 00 Kernel driver in use: pcieport-driver 00:04.0 PCI bridge: Intel Corporation E7525/E7520 PCI Express Port B (rev 0c) (prog-if 00 [Normal decode]) Flags: bus master, fast devsel, latency 0 Bus: primary=00, secondary=03, subordinate=05, sec-latency=0 I/O behind bridge: 00004000-00004fff Memory behind bridge: dd000000-deffffff Prefetchable memory behind bridge: 0000000050000000-00000000500fffff Capabilities: [50] Power Management version 2 Capabilities: [58] MSI: Enable- Count=1/2 Maskable- 64bit- Capabilities: [64] Express Root Port (Slot-), MSI 00 Kernel driver in use: pcieport-driver ・ ・ 省略

PCIカードを組み込む際に発生するトラブルとして多いのは、他のデバイスとIRQ番号が重複してしまうことです。

PCIカードはプラグ&プレイに対応しており、ほとんどの場合 IRQ番号などが自動的に割り当てられるため、特に設定を行う必要はありません。 もしIRQが衝突した場合は、BIOSでIRQを適切に設定し直す必要があります。



f. 通信デバイスの設定

1. シリアルポート
  • 1本の信号線を使って1ビットずつ順番にデータを送受信するシリアル転送方式の通信コネクタ(接続口)のこと
  • 通信用インターフェイスで外付けモデムやターミナルアダプタ、プリンタ等の接続に用いられます
  • シリアルポートを表すデバイスファイルは、1番目は/dev/ttyS0、2番目は/dev/ttyS1で表します
  • ttyS0等からどのI/OポートやIRQが対応しているかはsetserialコマンドで表示します(設定も可)


g. USBデバイスの設定

1.USBの特徴(Universal Serial Bus)
  • 最大127台のUSB機器を接続可能
  • 電源を入れた状態で接続・取り外しが可能(ホットプラグ対応)
  • プラグ&プレイをサポート
  • 様々な種類の機器であっても同一のコネクタで利用可能
  • USBポートから機器へ電源を供給可能(バスパワー)

USB規格では、PCに電源を入れたまま周辺機器やパーツの取り付け・取り外しができるホットプラグに対応しています。以前は/sbin/hotplugを実行認識していましたが、現在では/sbin/hotplugを使用せず動的にデバイスを管理するudevを使用した対応が一般的となっています。
すなわち、ホットプラグデバイス接続時にカーネルがudevのデーモンであるudevdに通知し、udevdは/etc/udev/ディレクトリ以下に格納されたスクリプトを実行します。

このとき、デバイスに関する情報はシステム上のデバイスのデータベースを管理しているHALのデーモンであるhaldに通知され、新たにデバイスの登録が行われます。その後、D-BUS(dbus)により各アプリケーションにその情報が通知され、デバイスを使用できるようになります。

USBデバイスが接続されると/var/log/messageにログが出力されます。


コールドプラグ
  • 電源を切った状態でのみ、接続・取り外しが可能な機器のこと
  • 機器を有効にするには、システムの起動時に接続されている必要がある

ホットプラグ
  • デバイスの電源を入れたまま接続、取り外しが可能
  • /etc/hotplugディレクトリ以下スクリプトで実現されている
● ホットプラグ対応機器の接続
  1. デバイス接続
     ↓
  2. カーネルがデーモンのudevdに通知
     ↓
  3. udevdが/etc/udevd/配下のスクリプトファイルを実行する。
    ※ルールファイルに従って動的にデバイスファイルが生成される。
     ↓
  4. デバイスに関する情報がhaldに通知され、新規のデバイスの登録が行われる。
    ※haldはシステム上でデバイスのDBを管理しているHALのデーモン。
     ↓
  5. D-BUSにより各アプリケーションに情報が通知され、デバイスが使用できる ようになる。

udev 】(userspace device management)
  • カーネルがパソコンに接続されていることを検出したデバイスに対して、動的に「デバイス・ファイル」を作成して割り当てるための仕組み
  • 動的に/devデバイスノードを作成する
  • 作成にはユーザが指定するルールまたはsysfsによって提供される情報を照合する
  • USB機器のように、ユーザーが任意のタイミングで接続と取り外しができるタイプ(ホットプラグ)では、udevを用いることでより柔軟に周辺機器が使用可能
  • どの周辺機器が接続されたら(カーネルから通知があったら)、どんなデバイス・ファイルを作るかという「対応付けルール」(udev rules)をユーザーが設定することにより、デバイスファイルの命名が可能
  • ルールは、/etc/udev/rules.d/ 以下に記載する

Sysfs

Sysfsは、仮想化ファイル・システムであり、システム内のデバイスをユーザー空間に公開し、デバイスの挿入や取外しが行われるたびに、その表示内容が動的に更新されます。

  • Sysfs は仮想ファイルシステムである。
  • Sysfs はデバイスやドライバについての情報をカーネルモデルからユーザ空間へエクスポートし、設定のためにも使われる。
  • ユーザープロセスから、デバイスやドライバーなどに関するカーネル情報にアクセスするためのインターフェイスとして提供される、オンメモリーのファイルシステムである。
  • Sysfs は実際のデバイスへのシンボリックリンクが置かれるが、それをディレクトリの階層構造として表現するところに特徴がある。

hald
  • USB機器のような、ホットプラグ可能なデバイスが接続や切断されると起動するデーモン
  • fstab-syncを呼び出し、/etc/fstabファイルを動的に追加、削除する

dbus
  • メッセージバスと呼ばれる、アプリケーション間でやりとりを行うためのプロセス間通信
  • イベントを各種アプリケーションに通知する


2.クラスドライバ

クラス ドライバは、特定の種類の USB 装置(例えばディスクドライブ、プリンタ、スキャナ)と通信することができるソフトウェアコンポーネントです。適切な クラス ドライバがあれば、対応するすべての装置を接続することができ、すぐに作業を始めることができます。追加のソフトウェアをインストールする必要はありません。

クラス ドライバは一般的なクラスの USB 周辺機器向けに書かれているため、特定の機能を持つ製品の中には利用できないものが生じる場合があります。ある特定の USB 装置の機能が動作しない場合は、その装置に付属のドライバをインストールするか、メーカーの Web サイトから最新バージョンのドライバをダウンロードする必要があるかもしれません。


3.USBに必要なモジュール

USB機器をコントロールするデバイスであるUSBホストコントローラには、次の種類があります。

  1. UHCI(Universal Host Controler Interface)
    • USB1.xに対応
    • Intelが中心になって開発
    • ホストコントローラドライバはusb-uhci.oでIntel、VIAのUHCIコントローラに対応
    • インターフェイスがシンプルでコストが安いが、CPUに負荷がかかる
  2. OHCI(Open Host Controler Interface)
    • USB1.xに対応
    • マイクロソフトが中心になって開発
    • ホストコントローラドライバはusb-ohci.oでCompaq、SIS、AliのOHCIコントローラに対応
    • UHCIと比べてCPUに負荷がかからない
  3. EHCI(Enhanced Host Controler Interface)
    • USB2.xに対応

USBコントローラを確認するには、dmesg コマンドか lspci コマンドか lsmod コマンドで確認します。

# dmesg | grep usb

# lspci -v

# lsmod | grep ehci ehci_hcd 33869 0

●USBコントローラのバージョンとカーネルモジュール
 コントローラversionモジュール 2.4モジュール 2.4
 UHCI1.1usb-uhciuhci-hcd
 OHCI1.1usb-ohciohci-hcd
 EHCI2.0ehci-hcdehci-hcd

USBデバイスが使用しているカーネルモジュールを表示するには、usbmodules コマンドを使用します。
BUS 001 、デバイス 001 のモジュールを表示するには

# usbmodules --device /proc/bus/usb/001/001

4.USBデバイスの情報取得と設定

USBデバイスの情報は、/proc/bus/usb 以下のディレクトリに保存されています。
コンピュータに接続されているUSBデバイスの情報は、/proc/bus/usb/devices に記述されています。

# cat /proc/bus/usb/devices
T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 2.06 S: Manufacturer=Linux 2.6.18-348.3.1.el5 uhci_hcd S: Product=UHCI Host Controller S: SerialNumber=0000:00:1d.1 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 2.06 S: Manufacturer=Linux 2.6.18-348.3.1.el5 uhci_hcd S: Product=UHCI Host Controller S: SerialNumber=0000:00:1d.0 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 4 B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 2.06 S: Manufacturer=Linux 2.6.18-348.3.1.el5 ehci_hcd S: Product=EHCI Host Controller S: SerialNumber=0000:00:1d.7 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=256ms

また、lsusb コマンドを使うことで表示することもできます。

● lsusb コマンド構文
  lsusb [オプション]

● lsusb コマンドオプション
 -v詳細な情報を表示する
 -s [[パス]:] [デバイスID]指定されたパスやデバイスIDのデバイスのみ表示する
 -tツリー表示する


# lsusb
Bus 003 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 Bus 002 Device 001: ID 0000:0000



h. デバイスドライバ

カーネルはOSの中核をなすプログラムで、ハードウェアの監視やアプリケーションの実行等を行います。そのカーネルでハードウェアの利用や監視を行うためにはデバイスドライバが必要となります。デバイスドライバは、「カーネルに組み込んで利用する場合」と「カーネルモジュールとして利用する場合」があります。

  • カーネルに組み込んで利用する場合
    システム起動時、カーネルをメモリにロードした時点でデバイスをサポートすることができます。ハードディスクなどシステムで頻繁に利用するハードウェアが適しています。

  • カーネルモジュールとして利用する場合
    ハードウェアを利用するたびに、必要なカーネルモジュールをメモリにロードします。システムで利用する頻度が低いハードウェアが適しています。

システム稼動中にロードされているカーネルモジュールを一覧表示するためには、「lsmod」を利用します。「lsmod」はカーネルモジュールごとに「名前」「サイズ」「利用回数」「このモジュールを参照しているモジュール名」を表示します。

cat /proc/modules としても lsmod と同じ出力になります。


# lsmod
Module Size Used by autofs4 29253 3 hidp 23105 2 rfcomm 42585 0 l2cap 29633 10 hidp,rfcomm bluetooth 53925 5 hidp,rfcomm,l2cap lockd 63337 0 sunrpc 146685 2 lockd ip_conntrack_netbios_ns 6977 0 ipt_REJECT 9665 1 xt_state 6209 13 ip_conntrack 53281 2 ip_conntrack_netbios_ns,xt_state nfnetlink 10713 1 ip_conntrack iptable_filter 7105 1 ip_tables 17029 1 iptable_filter ip6t_REJECT 9409 1 xt_tcpudp 7105 32 ip6table_filter 6849 1 ip6_tables 18053 1 ip6table_filter x_tables 17349 6 ipt_REJECT,xt_state,ip_tables,ip6t_REJECT,xt_tcpudp,ip6_tables dm_multipath 25421 0

カーネルモジュールのロード(modprobe)

modprobe は設定ファイルやコマンドラインで指示することにより、モジュールのロード、アンロードや状態表示などさまざまなモジュール管理を行うことができます。
Linuxカーネルの機能の一部を、カーネル本体とは別にロード、アンロードできるように分離したバイナリファイルをモジュールと呼びます。多くの場合、ハードウェアにアクセスし、操作するためのドライバ部分がモジュールとなっています。
たとえば1つまたは複数のモジュールを、それが必要とするモジュールとあわせてロードしたり、モジュールロード時にスクリプトを実行したりすることができます。

modprobeの設定ファイルはカーネルのバージョンによって異なります。
カーネル2.4系で使用される設定ファイルは/etc/modules.conf、
カーネル2.6系で使用される設定ファイルは/etc/modprobe.confです。

これら設定ファイルに処理内容を記述して、その modprobe を実行すると、システムがモジュールをロードする際、設定ファイルに記述された処理内容が参照されて自動的に実行されます。

以下はモジュールbcm5700をロードしています。


# vi /etc/modprobe.conf
alias eth0 bcm5700
# modprobe eth0

またカーネルモジュールを操作するとき「modprobe」は「modules.dep」ファイルを利用して、モジュール間の依存関係を調べます。その結果、モジュールが他のモジュールを必要としている場合は、そのモジュールを先にロードします。

modules.depファイルを最新の状態に更新するには、depmod コマンドを実行します。

# depmod

カーネルモジュールのロード(insmod)

insmod もカーネルモジュール(モジュール)をロードするコマンドです。
ただし、insmodの場合は、モジュール間の依存関係に注意が必要。依存関係のあるモジュールがある場合、先にそのモジュールをロードしておく必要があります。
モジュールの動作に必要な別のモジュール(依存するモジュール)がロードされていない場合、insmodコマンドはエラーメッセージを表示し、ロードを中断します。どのモジュールが必要なのかを確認するには、「modprobe」コマンドの「-D」オプションを使います。
以下はモジュールsr_mod.koをロードしています。


# insmod /lib/modules/2.6.32-754.31.1.el6.x86_64/kernel/drivers/scsi/sr_mod.ko

カーネルモジュールのアンロード(rmmod)

rmmod はカーネルモジュール(モジュール)をアンロードするコマンドです。
依存関係のあるモジュールがある場合、先にそのモジュールをアンロードしておく必要があります。
使用中のモジュールや、他のモジュールが依存しているモジュールをアンロードしようとした場合は、エラーメッセージを表示します。
以下はモジュールvfatをアンロードしています。


# rmmod vfat

rmmodコマンド、modprobeコマンドともに、他のモジュールから依存されているモジュールをアンロードすることはできません(「-f」オプションを除く)。


z. 出題範囲概要

概要 :
  • 基本的なシステムハードウェアの理解および構成や情報の取得ができる。

詳細 :
  • 組み込まれている周辺機器の有効/無効を切り替える。
    modprobe, insmod, rmmod, lsmod
  • さまざまな大容量記憶装置の相違点を理解している。
    HDD, SSD, 光学ストレージ
  • さまざまなハードウェア情報を取得できる。
    lsusb, lspci, /sys/, /proc/, /dev/
  • USBデバイスを操作するツール
    lsusb
  • sysfsudevdbusについて概念的に理解する。

  [ 例題 ] 


         

    www.it-shikaku.jp